package utils

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
	"linx/liface"
)

/*
	存储一切有关Linx框架的全局参数，供其他模块使用
*/

type GlobalObj struct {
	TcpServer liface.IServer // 全局 Server 对象
	Host      string         // 监听ip
	TcpPort   int            // 端口号
	Name      string         // 当前服务器名称

	Version          string // 当前Linx的版本号
	MaxConn          int    // 当前服务器允许的最大链接数
	MaxPackageSize   uint32 // 一次数据包的最大值
	WorkPoolSize     uint32 // 当前业务工作 Worker 池的 Goroutine
	MaxWorkerTaskLen uint32 // linx框架允许用户最多开辟多少个 Worker (限定)
}

var GlobalObject *GlobalObj // 全局唯一对象

func (g *GlobalObj) Reload() {
	// 从json中加载用于自定义的参数
	data, err := ioutil.ReadFile("conf/linx.json")
	if err != nil {
		fmt.Println("load json err:", err.Error())
		return
	}
	if err := json.Unmarshal(data, &GlobalObject); err != nil {
		fmt.Println("data un json err:", err.Error())
		return
	}
}

func init() {
	// 如果配置文件没有加载，则是默认的值
	GlobalObject = &GlobalObj{
		Name:             "LinxServerApp",
		Version:          "V0.7",
		TcpPort:          7777,
		Host:             "0.0.0.0",
		MaxConn:          1024,
		MaxPackageSize:   4096,
		WorkPoolSize:     10,
		MaxWorkerTaskLen: 1024,
	}

	// 尝试用 conf/linx.json 加载一些用户的
	GlobalObject.Reload()
}
